package ec.edu.ups.cidi.siia.plamdep.comunicacionweb;
import java.util.ArrayList;
import java.util.List;
import ec.edu.ups.cidi.siia.plamdep.comunicacionweb.Utils.HtmlUtils;
import ec.edu.ups.cidi.siia.plamdep.comunicacionweb.descarga.*;
import ec.edu.ups.cidi.siia.plamdep.comunicacionweb.extractorlinks.*;
import ec.edu.ups.cidi.siia.plamdep.utils.configuracion.ConfiguracionConexionWeb;
public class Busqueda {
       private DescargarFuente downloaderFuente=new DescargarFuente();
       private HtmlUtils utils=new HtmlUtils();

       private void cargarResultados(String link,ArrayList<String> resultados)
        {
                
                IExtractorLinks extractor = null;
                if(link.startsWith("https://www.google.com"))extractor=new LinksGoogle();
                else if(link.startsWith("http://webproxy"))extractor=    new LinksWebProxy();
                else if(link.startsWith("http://www.bing.com"))extractor=new LinksBing();
                else if(link.startsWith("http://search.yahoo.com"))extractor=new LinksYahoo();
                String contenidoHTML=downloaderFuente.descargarHTML(link);
                
             //   System.out.println(contenidoHTML);
                String content=contenidoHTML.replaceAll("\n","");
                if(content.trim().length()>0){
                    extractor.setContenidoHTML(content);
                    List<String>linksResult=extractor.getLinks();
                    ArrayList<String>aux=new ArrayList<String>(); 
                    for(int i=0;i<linksResult.size();i++)
                    {	if(i<=ConfiguracionConexionWeb.limite_results)
                    	aux.add(linksResult.get(i));
                    	else break;
                    	
                    }
                    addLinks(aux,resultados);
                }
        }
        private void addLinks(ArrayList<String> lnk,ArrayList<String> resultados)
        {  
            for(String l:lnk)
            {
                l=utils.reemplazarCaracteres(l);
                if(!resultados.contains(l))  resultados.add(l);
            }
         }
        public  ArrayList<String>  buscar(String busqueda, boolean proxy)
        {  
            ArrayList<String> resultados=new ArrayList<String> ();

            ConfiguracionConexionWeb conf=new ConfiguracionConexionWeb();
            
            busqueda=busqueda.replaceAll(" ", "%20");
            if(conf.bing)
            {	
            	  String lk_bing1="http://www.bing.com/search?q="+busqueda+"&go=&qs=ds&form=QBRE&filt=all";
                  String lk_bing2="http://www.bing.com/search?q="+busqueda+"java&go=&qs=ds&filt=all&first=11&FORM=PERE1";
		          cargarResultados(lk_bing1,resultados);
            }
            if(conf.yahoo)
            {	
		          String lk_yahoo1="http://search.yahoo.com/search;_ylt=A0oG7t3FFzpSD00AiG9XNyoA;_ylc=X1MyNzY2Njc5X3IyYmNrM2g1bzcxOTh0MTg2NSUyNmIlM0QzJTI2cyUzRHZkY3NyY3B2aWRBajVpVFVnZXVyQTRsd2NLVWRDZ3hRZkp5RzVaU2xJNkY4VUFBZVJEZnJ5ZnAtdC02MDBmcjJzYi10b3BncHJpZGdDMHN4M0ZmVGVpSy5PMEN5emJad0FuX3JzbHQxMG5fc3VnZzEwb3JpZ2luc2VhcmNoLnlhaG9vLmNvbXBvczBwcXN0cnBxc3RybHFzdHJsNHF1ZXJ5amF2YXRfc3RtcDEzNzk1Mzg5ODIwMDh2dGVzdGlkVklQMzA4?p="+busqueda+"&fr2=sb-top&fr=yfp-t-600";
		          String lk_yahoo2="http://search.yahoo.com/search;_ylt=A0oG7noNGDpSQ1gAp1RXNyoA?p="+busqueda+"&fr=yfp-t-600&fr2=sb-top&xargs=0&pstart=1&b=11&xa=FtAsPrFuAN0ZA1Milw2MIw--,1379625357";
		          cargarResultados(lk_yahoo1,resultados);
            }
            if(conf.google)
            {	
            	  String lk_google1="https://www.google.com.ec/search?q="+busqueda ;
            	  String lk_google2="https://www.google.com.ec/search?q="+busqueda+"&newwindow=1&ei=a8s8UvXaHIqG9QTyo4HADQ&start=10&sa=N&biw=1280&bih=675&dpr=1";
            	  String webProxyG1="http://webproxy.net/view?q="+lk_google1.replaceAll("%20", "\\+").replace("https", "http");
		            
            	  if(proxy) cargarResultados(webProxyG1,resultados);
		          else  cargarResultados(lk_google1,resultados);
            }
       
            //try { Thread.sleep(500); } catch (Exception ex) { }
                  
           return resultados;
        }

}